forked from openai/codex
-
Notifications
You must be signed in to change notification settings - Fork 0
Version 0.1.3 #3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add a dmg target that bundles the codex and codex responses api proxy binaries for MacOS. this target is signed and notarized. Verified by triggering a build here: https://github.com/openai/codex/actions/runs/20318136302/job/58367155205. Downloaded the artifact and verified that the dmg is signed and notarized, and the codex binary contained works as expected.
…er (openai#8275) when granting read access to the sandbox user, grant the codex/command-runner exe directory first so commands can run before the entire read ACL process is finished.
) # Terminal Detection Metadata for Per-Terminal Scroll Scaling ## Summary Expand terminal detection into structured metadata (`TerminalInfo`) with multiplexer awareness, plus a testable environment shim and characterization tests. ## Context / Motivation - TUI2 owns its viewport and scrolling model (see `codex-rs/tui2/docs/tui_viewport_and_history.md`), so scroll behavior must be consistent across terminals and independent of terminal scrollback quirks. - Prior investigations show mouse wheel scroll deltas vary noticeably by terminal. To tune scroll scaling (line increments per wheel tick) we need reliable terminal identification, including when running inside tmux/zellij. - tmux is especially tricky because it can mask the underlying terminal; we now consult `tmux display-message` client termtype/name to attribute sessions to the actual terminal rather than tmux itself. - This remains backwards compatible with the existing OpenTelemetry user-agent token because `user_agent()` is still derived from the same environment signals (now via `TerminalInfo`). ## Changes - Introduce `TerminalInfo`, `TerminalName`, and `Multiplexer` with `TERM_PROGRAM`/`TERM`/multiplexer detection and user-agent formatting in `codex-rs/core/src/terminal.rs`. - Add an injectable `Environment` trait + `FakeEnvironment` for testing, and comprehensive characterization tests covering known terminals, tmux client termtype/name, and zellij. - Document module usage and detection order; update `terminal_info()` to be the primary interface for callers. ## Testing - `cargo test -p codex-core terminal::tests` - manually checked ghostty, iTerm2, Terminal.app, vscode, tmux, zellij, Warp, alacritty, kitty. ``` 2025-12-18T07:07:49.191421Z INFO Detected terminal info terminal=TerminalInfo { name: Iterm2, term_program: Some("iTerm.app"), version: Some("3.6.6"), term: None, multiplexer: None } 2025-12-18T07:07:57.991776Z INFO Detected terminal info terminal=TerminalInfo { name: AppleTerminal, term_program: Some("Apple_Terminal"), version: Some("455.1"), term: None, multiplexer: None } 2025-12-18T07:08:07.732095Z INFO Detected terminal info terminal=TerminalInfo { name: WarpTerminal, term_program: Some("WarpTerminal"), version: Some("v0.2025.12.10.08.12.stable_03"), term: None, multiplexer: None } 2025-12-18T07:08:24.860316Z INFO Detected terminal info terminal=TerminalInfo { name: Kitty, term_program: None, version: None, term: None, multiplexer: None } 2025-12-18T07:08:38.302761Z INFO Detected terminal info terminal=TerminalInfo { name: Alacritty, term_program: None, version: None, term: None, multiplexer: None } 2025-12-18T07:08:50.887748Z INFO Detected terminal info terminal=TerminalInfo { name: VsCode, term_program: Some("vscode"), version: Some("1.107.1"), term: None, multiplexer: None } 2025-12-18T07:10:01.309802Z INFO Detected terminal info terminal=TerminalInfo { name: WezTerm, term_program: Some("WezTerm"), version: Some("20240203-110809-5046fc22"), term: None, multiplexer: None } 2025-12-18T08:05:17.009271Z INFO Detected terminal info terminal=TerminalInfo { name: Ghostty, term_program: Some("ghostty"), version: Some("1.2.3"), term: None, multiplexer: None } 2025-12-18T08:05:23.819973Z INFO Detected terminal info terminal=TerminalInfo { name: Ghostty, term_program: Some("ghostty"), version: Some("1.2.3"), term: Some("xterm-ghostty"), multiplexer: Some(Tmux { version: Some("3.6a") }) } 2025-12-18T08:05:35.572853Z INFO Detected terminal info terminal=TerminalInfo { name: Ghostty, term_program: Some("ghostty"), version: Some("1.2.3"), term: None, multiplexer: Some(Zellij) } ``` ## Notes / Follow-ups - Next step is to wire `TerminalInfo` into TUI2’s scroll scaling configuration and add a per-terminal tuning table. - The log output in TUI2 helps validate real-world detection before applying behavior changes.
…enai#8280) this fixes sandbox errors (legacy and elevated) for commands that include pipes, which the model often favors.
See snapshots for view of edge cases This is still named `UnifiedExecSessions` for consistency across the code but should be renamed to `BackgroundTerminals` in a follow-up Example: <img width="945" height="687" alt="Screenshot 2025-12-18 at 20 12 53" src="https://github.com/user-attachments/assets/92f39ff2-243c-4006-b402-e3fa9e93c952" />
This implements the new config design where config _requirements_ are loaded separately (and with a special schema) as compared to config _settings_. In particular, on UNIX, with this PR, you could define `/etc/codex/requirements.toml` with: ```toml allowed_approval_policies = ["never", "on-request"] ``` to enforce that `Config.approval_policy` must be one of those two values when Codex runs. We plan to expand the set of things that can be restricted by `/etc/codex/requirements.toml` in short order. Note that requirements can come from several sources: - new MDM key on macOS (not implemented yet) - `/etc/codex/requirements.toml` - re-interpretation of legacy MDM key on macOS (`com.openai.codex/config_toml_base64`) - re-interpretation of legacy `/etc/codex/managed_config.toml` So our resolution strategy is to load TOML data from those sources, in order. Later TOMLs are "merged" into previous TOMLs, but any field that is already set cannot be overwritten. See `ConfigRequirementsToml::merge_unset_fields()`.
Add a v2 event for deprecation notices so we can get rid of `codex/event/deprecation_notice`.
<img width="200" alt="7ff2254b-e96f-42fc-8232-b4e76cb26248" src="https://github.com/user-attachments/assets/1f56799d-e2cd-4b69-9290-854943f7c6b6" />
Version `0.12.0` includes modelcontextprotocol/rust-sdk#590, which I will use in openai#8142. Changes: - `rmcp::model::CustomClientNotification` was renamed to `rmcp::model::CustomNotification` - a bunch of types have a `meta` field now, but it is `Option`, so I added `meta: None` to a bunch of things
Allow SKILL.md to specify a more human-readable short description as skill metadata.
…st (openai#8142) Historically, `accept_elicitation_for_prompt_rule()` was flaky because we were using a notification to update the sandbox followed by a `shell` tool request that we expected to be subject to the new sandbox config, but because [rmcp](https://crates.io/crates/rmcp) MCP servers delegate each incoming message to a new Tokio task, messages are not guaranteed to be processed in order, so sometimes the `shell` tool call would run before the notification was processed. Prior to this PR, we relied on a generous `sleep()` between the notification and the request to reduce the change of the test flaking out. This PR implements a proper fix, which is to use a _request_ instead of a notification for the sandbox update so that we can wait for the response to the sandbox request before sending the request to the `shell` tool call. Previously, `rmcp` did not support custom requests, but I fixed that in modelcontextprotocol/rust-sdk#590, which made it into the `0.12.0` release (see openai#8288). This PR updates `shell-tool-mcp` to expect `"codex/sandbox-state/update"` as a _request_ instead of a notification and sends the appropriate ack. Note this behavior is tied to our custom `codex/sandbox-state` capability, which Codex honors as an MCP client, which is why `core/src/mcp_connection_manager.rs` had to be updated as part of this PR, as well. This PR also updates the docs at `shell-tool-mcp/README.md`.
regression: openai#8199 Signed-off-by: Koichi Shiraishi <zchee.io@gmail.com>
…onfigBuilder (openai#8276) openai#8235 introduced `ConfigBuilder` and this PR updates all call non-test call sites to use it instead of `Config::load_from_base_config_with_overrides()`. This is important because `load_from_base_config_with_overrides()` uses an empty `ConfigRequirements`, which is a reasonable default for testing so the tests are not influenced by the settings on the host. This method is now guarded by `#[cfg(test)]` so it cannot be used by business logic. Because `ConfigBuilder::build()` is `async`, many of the test methods had to be migrated to be `async`, as well. On the bright side, this made it possible to eliminate a bunch of `block_on_future()` stuff.
## Description
Introduced `ExternalSandbox` policy to cover use case when sandbox
defined by outside environment, effectively it translates to
`SandboxMode#DangerFullAccess` for file system (since sandbox configured
on container level) and configurable `network_access` (either Restricted
or Enabled by outside environment).
as example you can configure `ExternalSandbox` policy as part of
`sendUserTurn` v1 app_server API:
```
{
"conversationId": <id>,
"cwd": <cwd>,
"approvalPolicy": "never",
"sandboxPolicy": {
"type": ""external-sandbox",
"network_access": "enabled"/"restricted"
},
"model": <model>,
"effort": <effort>,
....
}
```
Screenshots here but check the snapshot files to see it better <img width="712" height="408" alt="Screenshot 2025-12-18 at 11 58 02" src="https://github.com/user-attachments/assets/84a2c410-0767-4870-84d1-ae1c0d4c445e" /> <img width="523" height="352" alt="Screenshot 2025-12-18 at 11 17 41" src="https://github.com/user-attachments/assets/d029c7ea-0feb-4493-9dca-af43a0c70c52" />
Only display the skill name (not the folder), and truncate the skill description to a maximum of two lines.
Fix broken tests.
skills default on.
a new scope reads from /etc/codex
We were assembling the skill roots in two different places, and the admin root was missing in one of them. This change centralizes root selection into a helper so both paths stay in sync.
Keep windows OFF first.
# External (non-OpenAI) Pull Request Requirements Before opening this Pull Request, please read the dedicated "Contributing" markdown file or your PR may be closed: https://github.com/openai/codex/blob/main/docs/contributing.md If your PR conforms to our contribution guidelines, replace this text with a detailed and high quality description of your changes. Include a link to a bug report or enhancement request.
…enai#8303) Fixes openai#8214 by removing the '--staged' flag from the undo git restore command. This ensures that while the working tree is reverted to the snapshot state, the user's staged changes (index) are preserved, preventing data loss. Also adds a regression test.
…wd (openai#8353) `load_config_layers_state()` should load config from a `.codex/config.toml` in any folder between the `cwd` for a thread and the project root. Though in order to do that, `load_config_layers_state()` needs to know what the `cwd` is, so this PR does the work to thread the `cwd` through for existing callsites. A notable exception is the `/config` endpoint in app server for which a `cwd` is not guaranteed to be associated with the query, so the `cwd` param is `Option<AbsolutePathBuf>` to account for this case. The logic to make use of the `cwd` will be done in a follow-up PR.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.